const app = getApp()
let secret_code = '' // 验证码默认是空
let redirectUrl = '' // 重定向的地址
Page({
  data: {
    countDownVisible: false, // 是否显示倒计时组件
    mobile: '18812345678', // 手机号
    code: '', // 验证码
  },
  onLoad(options) {
    redirectUrl = options.redirectUrl
  },
  // 获取验证码
  async getCode() {
    // 1.判断手机号是否通过校验
    if (!this.verifyMobile()) return
    // 2. 通过校验 - 发送请求
    // 2.1 查看接口文档
    // 2.2 请求成功 or 失败
    // 2.3 成功 - 获取/拿验证码
    // 2.3.1 提示用户 + 开启倒计时
    // 2.4 失败 - 提示用户
    const { mobile } = this.data
    const res = await wx.http.get('/code', { mobile })
    if (res.code !== 10000) return wx.utils.toast('发送短信失败, 请稍后再试')
    wx.utils.toast('发送短信成功')
    this.setData({
      countDownVisible: true,
    })
    secret_code = res.data.code
    // // 剪切板 - 自动复制验证码
    // wx.setClipboardData({
    //   data: res.data.code,
    // })
  },
  // 登录/注册
  async submit() {
    // 1. 验证手机号和验证码是否符合规则
    if (!this.verifyMobile()) return
    if (!this.verifyCode()) return
    // 2. 获取手机号和验证码
    // 3. 发送请求
    // 4. 存储token
    // 5. 更新应用实例app.js中的token
    const { mobile, code } = this.data
    const res = await wx.http.post('/login', { code, mobile })
    console.log(res)
    if (res.code !== 10000) return wx.utils.toast('登录异常...')
    // 存储token + 存储refreshToken
    app.setToken(res.data.token, res.data.refreshToken)
    // 6. 跳转到指定的页面
    wx.redirectTo({
      url: redirectUrl,
    })
  },
  // 复制验证码
  copyCode() {
    wx.setClipboardData({
      data: secret_code,
    })
  },
  // 针对于验证码 - 正则校验
  verifyCode() {
    const reg = /^\d{6}$/
    const code = this.data.code.trim()
    const valid = reg.test(code)
    if (!valid) {
      wx.utils.toast('验证码不符合规则')
    }
    // 不管成功还是失败, 都需要返回校验结果
    return valid
  },
  // 针对于手机号 - 正则校验
  verifyMobile() {
    const reg = /^1[3-9]\d{9}$/
    const mobile = this.data.mobile.trim()
    // valid 校验的结果 / 返回的是布尔类型
    const valid = reg.test(mobile)
    if (!valid) wx.utils.toast('手机号不符合规则...')
    // 将校验结果进行返回
    return valid
  },

  // 倒计时变化时触发
  countDownChange(ev) {
    this.setData({
      timeData: ev.detail,
      // countDownVisible值为true的条件: (1) 1分钟  (2) 秒数大于0
      countDownVisible: ev.detail.minutes === 1 || ev.detail.seconds > 0,
    })
  },
})
